//
// Created by Administrator on 2022/7/9.
//
#include "Tree.cpp"
//输出叶子结点
void printf(Tree root){
    if(root!=NULL){
        //输出叶子结点
        if(root->leftChild==NULL&&root->rightChild==NULL){
            printf("%d",root->data);
        }
        //先序遍历左子树
        printf(root->leftChild);
        //先序遍历右子树
        printf(root->rightChild);
    }
}
//统计叶子结点数目
int count(Tree root){
    //如果结点为空 返回0
    if(root==NULL){
        return 0;
    }
    //如果节点为叶子结点返回1
    if(root->leftChild==NULL&&root->rightChild==NULL){
        return 1;
    }
    //递归遍历左右子树
    return count(root->leftChild)+count(root->rightChild);
}
//求二叉树的高度
int height(Tree root){
    //结点为空 返回0
    if(root==NULL){
        return 0;
    }
    //节点为叶子结点 返回1
    if(root->leftChild==NULL&&root->rightChild==NULL){
        return 1;
    }
    //否则返回左右子树高度的最大值
    int hl= height(root->leftChild);
    int hr= height(root->rightChild);
    return hl>hr?hl+1:hr+1;
}
//按树状打印二叉树
//逆中序的思想
void printtree(Tree root){
    if(root!=NULL){
        printtree(root->rightChild);
        printf("%d",root->data);
        printtree(root->leftChild);
    }
}
int main(){
    Tree tree= CreateTreeByFile("bianli.txt");
//    printf(tree);
//    printf("%d",count(tree));
//    printf("%d",height(tree));
    printtree(tree);
}